這次想來教大家如何使用AWS去部署fastapi,這篇也會教大家怎麼從API Gateway這邊連線到AWS RDS~~~
在開始教怎麼部署一個API的時候,先來跟大家講一下API GATEWAY是什麼,可以看到下圖,API GATEWAY就像一個橋樑連結前端和後端,前端像是網頁,後端像是我們在AWS建的EC2、RDS,API Gateway 負責處理有關接受和處理多達數十萬個並行 API 呼叫的所有任務,這些任務包括流量管理、授權和存取控制、監控和 API 版本管理。也就是說AWS已經幫我處理好很多流量管理、權限等等的問題,我們只要專心把API寫好部署即可,不用管一些平常在公司要請Data Engineer做的一些設定,輕鬆部署~~

一樣首先先去搜尋AWS的API GATEWAY的服務,並且點選它

然後選REST API,這樣我們才能使用http和AWS的服務

接著選新API,然後API的名稱就自己隨意取

Lambda
首先進到AWS Lambda服務後,選取函式->建立函式

然後輸入我們函式的名稱以及選取我們在執行函式需要的環境後,就可以按建立函式,建立我們的第一個lambda 函式囉~~~

然後我們就會到程式的編輯頁面,可以開始建立我們fastapi的程式~~

我們先把原本lambda_function.py 這個檔案改成 main.py 這樣比較符合fastapi的檔案命名(不改也可以),然後再寫一個最簡單的fastapi回傳hello word,值得注意的是可以看到程式碼第11行需要用Mangum 去把我們的fastapi包起來,這是為什麼呢?因為Mangum可以將任何ASGI的應用(fastapi)轉成lambda handler讓Lambda函數執行,簡單來說就是可以讓我們的fastapi服務可以在AWS lambda服務上運行。

再來我們要來設定執行的時候lambda要執行的func,這部分也是很多教學沒提到的部分,如果沒設定就會跑不起來,我們要去改下圖紅框框的地方把原本的lambda_function.lambda_handler改成 main.handler 這樣lambda函數才知道啟動的時候要執行什麼。

你以為這樣就結束了嗎,並沒有xd,你會發現我們都沒有裝套件要怎麼執行fastapi和Mangum呢?所以接下來我們要來裝套件,這裏會透過Layer這個功能來裝套件,好處是可以讓不同的lambda函式共用這個layer,要在這個layer裝套件,我們必須先在本地準備好套件的壓縮檔,所以先來教大家怎麼準備這個壓縮檔~~
首先先創一個叫python的資料夾(一定要叫python不然會吃不到),然侯同時準備好requirements.txt裡面寫好要裝的套件版本

目錄結構如下:

接著回到一開始的地方,輸入壓縮python資料夾的指令,壓縮成dependency.zip,這樣我們就可以準備上傳囉~~
接著回到AWS選layer->建立Layer,

一樣輸入這個layer的名稱以後,我們上傳我們剛剛用好的壓縮檔後就可以建立Layer囉~~

再來回到lambda 函式的頁面,設定layer,點選新增layer

選取自訂layer,選剛剛我們創立好的layer,版本因為只有一版,所以是1。

套件和api程式碼都準備好我們就可以開始部署,點選deploy,這樣就部署完成囉~~

來測試一下看看有沒有順利運行~~點選Test

然後在範本的地方選apigateway-aws-proxy,然後把紅色框框的地方都改成下圖這樣,這樣才可以打得到我們的api
可以看到成功回傳Hello World,這樣就完成fastapi部署在lambda上面囉

參考資料: